
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [dbo].[SP_TDDISP_INLO_I01]
/*---------------------------------------------------------*/                
/*---Empresa              : OFISIS S.A.                  --*/                
/*---Cliente              : OFISIS S.A.                  --*/                
/*---Sistema              : OFITESO                      --*/                
/*---Módulo               : Empresa                      --*/                
/*---Programa             : Interface Contable logística O/C--*/                
/*---Nombre SP            : SP_TDDISP_INLO_I01           --*/                
/*---Desarrollado por     : LAAP                    --*/                
/*---Fecha Creación       : 28/10/2010                   --*/                
/*---Base Datos           : Microsoft Sql Server         --*/                
/*---Versión              : 9.0                          --*/                
/*---Invoca a SP          :                              --*/                
/*---------------------------------------------------------*/                
/*---Modificado 1 por     :                     --*/                
/*---Fecha Modificación   :                        --*/                
/*---Detalle Modificación :         --*/                
/*---------------------------------------------------------*/                
/*---Comentarios                                         --*/                
/*---                                                    --*/                
/*---------------------------------------------------------*/                
/*--- Drop Proc SP_TDDISP_INLO_I01                       --*/                
/*--- Grant Execute on SP_TDDISP_INLO_I01 to public       --*/                
/*--            
  Execute SP_TDDISP_INLO_I01 '01', '20100049181', 'FAC', '0001-0000000123'            
--*/                
/*------------------------------------------------------------------------*/                
              
@ISCO_EMPR        TD_VC_002,          /* Código de la Empresa         */               
@ISCO_PROV          TD_VC_020,          /* Código de proveedor          */                
@ISCO_TIPO_DOCU   TD_VC_003,          /* Tipo de Documento            */                
@ISNU_DOCU_PROV   TD_VC_020           /* NUmero de Documento          */                
                
As                
Declare                
              
--  Variables de Trabajo                
@VSCO_MONE_CPRO         TD_VC_003,          /* Moneda costo promedio       */              
@VSCO_MONE_NACI         TD_VC_003,          /* Moneda Nacional             */              
@VSCO_MONE_CNTB         TD_VC_003,          /* Moneda Contabilidad         */              
@VNNU_ANNO              TD_IN_004_ANOS,     /* Año de proceso              */              
@VNNU_MESE              TD_IN_002_MESE,     /* Mes de proceso              */              
@VSTI_CUEN_EXIS         TD_VC_001,          /* Tipo cuenta existencia   */                
@VSNU_ASTO              TD_VC_010,          /* Número asiento (Voucher)    */               
@VNNU_SECU             TD_IN_001,          /* Número asiento (Voucher)    */              
@VSCO_CNTA_EXIS         TD_VC_010,          /* Cuenta Existencia           */               
@VSCO_MONE_CNTA         TD_VC_003,          /* Moneda Cuenta Contable      */              
@VSCO_CNTA_EMPR         TD_VC_010,          /* Cuenta Contable             */               
@VSST_MONE              TD_VC_001,          /* Flag de Control de Moneda   */              
@VSST_AUXI_CNTA         TD_VC_001,          /* Flag de Auxiliar            */              
@VSST_DOCU_CNTA         TD_VC_001,          /* Flag de Documento           */              
@VSST_ORDE_CNTA         TD_VC_001,          /* Flag de Orden de Servicio   */              
@VNFA_CAMB              TD_NU_015_006,      /* Factor de cambio            */              
@VNFA_CAMB_DIAR         TD_NU_015_006,      /* Factor de cambio Diario     */              
@VSTI_AUXI_EMPR         TD_VC_001,          /* Tipo Auxiliar Contable      */              
@VSCO_AUXI_EMPR         TD_VC_020,          /* Codigo Auxiliar Contable    */         
@VSCO_ORDE_SERV         TD_VC_020,          /* Codigo Orden de Servicio    */              
@VSTI_DOCU              TD_VC_003,          /* Tipo Documento              */              
@VSNU_DOCU              TD_VC_020,          /* Numero Documento            */              
@VDFE_DOCU              TD_DT_001,          /* Fecha Documento             */              
@VSTI_OPER              TD_VC_003,          /* Tipo Operacion              */              
@VSCO_MONE_ASTO      TD_VC_003,          /* Moneda Asiento              */              
@VSCO_MONE_PUEN         TD_VC_003,          /* Moneda Puente       */                
@VNIM_MVTO_ORIG         TD_NU_016_004,      /* Importe Movimiento Origen   */              
@VNIM_MVTO_CNTB        TD_NU_016_004,      /* Importe Movimiento Contable */              
@VSDE_GLOS              TD_VC_100,          /* Glosa                       */                
@VSCO_OPRC_ANTE         TD_VC_003,          /* Operacion Contable Anterior */              
@VSTI_DOCU_ORCO         TD_VC_003,     /* Tipo doc. O/C */              
              
--- Importes Adicionales ---                
@VNIM_GAFO    TD_NU_016_004,                
@VNIM_SEGU    TD_NU_016_004,                
@VNIM_FLET    TD_NU_016_004,                
@VSST_AFEC_GAFI   TD_VC_001_SINO,                
@VSST_AFEC_MORA   TD_VC_001_SINO,                
@VSST_AFEC_FLET   TD_VC_001_SINO,              
                
--  Declaro variables para el cursor 1 --                
@CSCO_UNID    TD_VC_003,                
@CSCO_ALMA    TD_VC_003,                
@CSTI_DOCU_ORIG   TD_VC_003,                
@CSNU_DOCU_ORIG   TD_VC_020,                
@CSTI_DOCU_GUIN   TD_VC_003,                
@CSNU_DOCU_GUIN   TD_VC_020,                
@CSTI_DOCU    TD_VC_003,                
@CSNU_DOCU    TD_VC_020,                
                
@CDFE_DOCU    TD_DT_001,                
@CSTI_MOVI    TD_VC_001,                
                
@CSCO_CNTA_EMPR         TD_VC_010,                
@CSTI_AUXI_CABE         TD_VC_001,                
@CSCO_AUXI_CABE         TD_VC_020,                
@CSCO_ORDE_CABE         TD_VC_020,                
@CSTI_AUXI_CAB1         TD_VC_001,                
@CSCO_AUXI_CAB1         TD_VC_020,                
@CSCO_ORDE_CAB1         TD_VC_020,                
@CSCO_CNTA_CAB1         TD_VC_010,                
@CSTI_AUXI_DETA         TD_VC_001,                
@CSCO_AUXI_DETA         TD_VC_020,                
@CSCO_ORDE_DETA         TD_VC_020,                
@CSCO_CNTA_DETA         TD_VC_010,                
@CSCO_CNTA_PTIM         TD_VC_010,                
@CSCO_CNTA_OPER         TD_VC_010,                
@CSCO_MONE_MOVI         TD_VC_003,        /* Moneda Movimiento           */                
@CNFA_CAMB_MOVI         TD_NU_015_006,    /* Factor de cambio Movi       */                
@CNFA_CONV_MOVI         TD_NU_015_006,    /* Factor de Conversión Movi   */                
@CNIM_MOVI              TD_NU_016_004,    /* Importe Movimiento          */                
@CSCO_EMPR_0001         TD_VC_002,                
@CNNU_CNTB_EMP1         TD_IN_001,                
@CSCO_UNID_CNT1      TD_VC_003,                
@CSCO_OPRC_CNT1         TD_VC_003,                
@CNNU_ANNO_0001         TD_IN_004_ANOS,                
@CNNU_MESE_0001         TD_IN_002_MESE,                
@CSNU_ASTO_0001         TD_VC_010,                
@CNNU_SECU_0001         TD_IN_001,                
@CDFE_ASTO_CNTB         TD_DT_001,                
@CSCO_CNTA_EMP1         TD_VC_010,                
@CSTI_AUXI_EMP1         TD_VC_001,                
@CSCO_AUXI_EMP1         TD_VC_020,                
@CSTI_DOCU_0001         TD_VC_003,                
@CSNU_DOCU_0001         TD_VC_020,                
@CDFE_DOCU_0001         TD_DT_001,                
@CDFE_DOCU_VENC         TD_DT_001,                
@CSTI_CAMB_0001         TD_VC_003,                
@CSCO_MONE_0001         TD_VC_003,      
@CNFA_CAMB_0001         TD_NU_015_006,                
@CNFA_CAMB_DIA1         TD_NU_015_006,                
                
@CNIM_MVTO_ORI1         TD_NU_016_004,                
@CNIM_MVTO_CNT1         TD_NU_016_004,                
@CSDE_GLOS_0001     TD_VC_100,                
@CSTI_DOCU_REF1         TD_VC_003,                
@CSNU_DOCU_REF1         TD_VC_020,                
@CDFE_DOCU_REF1         TD_DT_001,                
@CSNO_GIRA_0001         TD_VC_100,                
@CDFE_ENTR_CHE1         TD_DT_001,                
@CDFE_PROG_CHE1         TD_DT_001,                
@CSCO_ORDE_SER1         TD_VC_020,                
@CSSI_MVTO_CNT1         TD_VC_003,                
                
@CSCO_UNID_ORI1         TD_VC_003,                
@CSCO_OPRC_ORI1         TD_VC_003,                
@CSNU_ASTO_ORI1         TD_VC_010,                
@CSST_OTRS_0001      TD_VC_001,                
@CSST_ATEN              TD_VC_001,                
@CNNU_PROC_0001         TD_IN_001,                
@CNNU_PROC_SEC1         TD_IN_001,                
@CSST_IMPR_CHE1         TD_VC_001,                
@CSST_FLAG_0001         TD_VC_020,                
@CSCO_TABL_ORI1         TD_IN_001,                
@CSCO_CLAV_TAO1         TD_VC_050,                
@CSCO_USUA_MOD1         TD_VC_008,                
@CDFE_USUA_MODI         TD_DT_001,                
@VSCO_CNTA_PTIM         TD_VC_010,                
@VNNU_CORR           TD_IN_001,                
                  
@VSCO_MONE_IMPO         TD_VC_003,          /* Moneda Importación          */                 
@CSST_ORCO              TD_VC_001_SINO,                  
@CSST_INGR_COMP         TD_VC_001_SINO,                  
@CSST_EXTR              TD_VC_001_SINO,                  
@CNFA_CAMB_M001         TD_NU_015_006,      /* Factor de Cambio Mov.       */                  
@CNFA_CONV_M001         TD_NU_015_006,      /* Factor de Conversión Mov.   */                  
@VSCO_CNTA_PUEN         TD_VC_010,                  
@CNIM_MOVI_COMP         TD_NU_016_004,      /* Importe Movimiento Compra   */                    
@ISCO_USUA              TD_VC_008,           /* variable que sera parametro de ingreso*/              
                   
@CSST_CNTA_EXIS    TD_VC_001,                
@CSST_CNTA_COMP    TD_VC_001,                
@CSST_CNTA_CVTA    TD_VC_001,                
@CSST_CNTA_EXRE    TD_VC_001,                
@CSST_CNTA_VARI    TD_VC_001,                
@CSST_CNTA_GAST    TD_VC_001,                
@CSTI_CABO_0001    TD_VC_003,                 
@CSTI_CABO_0002    TD_VC_003,               
              
@CSCO_MONE_DOCU   TD_VC_003,   /*Moneda del Documento Proveedor*/              
@CSCO_MONE_ORDE   TD_VC_003,   /*Moneda de O-C*/              
@CDFE_EMIS_DOCU   TD_DT_001,   /*Fecha del Documento Proveedor*/              
@CNFA_TIPO_CAMB   TD_NU_015_006,  /*Factor Cambio Documento Proveedor*/              
              
@VSCO_MONE_TESO   TD_VC_003,   /*Moneda Nacional*/              
@VSCO_MONE_EXTR   TD_VC_003,   /*Moneda Extranjera*/              
@VSTI_CAMB  TD_VC_001,   /*Tipo de cambio (Compra = 'C', Venta = 'V')*/              
@VSTI_ORIG  TD_VC_001,   /*Tipo de cambio origen (Oficial = 'O', Mercado = 'M')*/              
@VNIM_DIST  TD_NU_016_004,  /* Importe Distribucion*/         
@VNNU_COUNT     TD_IN_001      
    
CREATE TABLE #TWDISP_CCOS    
(    
 CO_EMPR   VARCHAR(2) NOT NULL,    
 CO_PROV   VARCHAR(20) NOT NULL,    
 CO_TIPO_DOCU VARCHAR(3) NOT NULL,    
 NU_DOCU_PROV VARCHAR(20) NOT NULL,    
 NU_CORR   INT NOT NULL,    
 TI_AUXI_EMPR VARCHAR(1) NULL,    
 CO_CENT_COST VARCHAR(20) NULL,    
 CO_CNTA_EMPR VARCHAR(20) NULL,    
 CO_ORDE_SERV VARCHAR(20) NULL,    
 ST_DIST   VARCHAR(1) NULL,    
 PO_DIST   NUMERIC(16,4),     
 IM_DIST   NUMERIC(16,4),    
 DE_OBSE   VARCHAR(100) NULL,    
 TI_DOCU   VARCHAR(3) NULL,    
 NU_DOCU   VARCHAR(20) NULL,    
 FE_VENC   DATETIME NULL,    
 CO_USUA_CREA VARCHAR(8) NULL,    
 FE_USUA_CREA DATETIME NULL,    
 CO_USUA_MODI VARCHAR(8) NULL,    
 FE_USUA_MODI DATETIME NULL,    
 ST_FACT   VARCHAR(1) NULL,    
 CO_UNID_REFE VARCHAR(3) NULL    
)    
          
              
BEGIN TRANSACTION SP_TDDISP_INLO_I01              
        
      
SELECT @VNIM_MVTO_ORIG = 0, @VNIM_MVTO_CNTB = 0, @VSCO_MONE_ASTO = NULL      
      
      
 --Declaro Cursor 1, todos los movimientos               
 Declare CU_TDDISP_INLO_I01_1 Cursor               
 For              
 Select  t1.CO_UNID, t1.CO_ALMA, t1.TI_DOCU_GUIN, t1.NU_DOCU_GUIN,                
   t1.TI_DOCU_ORIG, t1.NU_DOCU_ORIG, t2.CO_MONE, T1.CO_MONE, T2.FE_EMIS, T2.FA_TIPO_CAMB              
 From    TDORDE_FACT t1 INNER JOIN TMDOCU_PROV T2              
 ON  T1.CO_EMPR = T2.CO_EMPR              
 AND  T1.CO_PROV = T2.CO_PROV              
 AND  T1.CO_TIPO_DOCU = T2.CO_TIPO_DOCU              
 AND  T1.NU_DOCU_PROV = T2.NU_DOCU_PROV               
 Where   t1.CO_EMPR = @ISCO_EMPR              
 And     t1.CO_PROV = @ISCO_PROV                
 And     t1.CO_TIPO_DOCU = @ISCO_TIPO_DOCU              
 And     t1.NU_DOCU_PROV = @ISNU_DOCU_PROV                
 Order By t1.TI_DOCU_ORIG, t1.NU_DOCU_ORIG              
                 
 --Recupero moneda costo Promedio              
 Select  @VSCO_MONE_CPRO = t1.CO_MONE_CPRO,              
   @VSCO_MONE_NACI = t2.CO_MONE_NACI,              
   @VSCO_MONE_IMPO = t1.CO_MONE_IMPO,              
   @VSTI_CUEN_EXIS = t1.TI_CUEN_EXIS                
 From    TMPARA_LOGI t1, TMEMPR t2                
 Where   t1.CO_EMPR = @ISCO_EMPR              
 And     t1.CO_EMPR = t2.CO_EMPR                
               
 --Tipo de Cambio              
 Select  @VSTI_CAMB = TI_CAMB,               
   @VSTI_ORIG = TI_ORIG                          
 From  TTFACA_OPCI                          
 Where  CO_EMPR = @ISCO_EMPR                          
 And  CO_MODU = 'TEEM0001'                          
 And  CO_MENU = 'FTEEMBA'                          
              
 --Obtengo datos Parametros OFITESO              
 If ( @VSTI_CAMB Is Null Or @VSTI_ORIG Is Null )                          
 Begin              
  Select @VSCO_MONE_TESO = CO_MONE_DEFA,               
    @VSCO_MONE_EXTR = CO_MONE_EXTR,                           
    @VSTI_CAMB = TI_CAMB,               
    @VSTI_ORIG = TI_ORIG                          
  From  TMPARA_TESO           
  Where  CO_EMPR = @ISCO_EMPR                          
 End              
 Else                          
 Begin              
  Select  @VSCO_MONE_TESO = CO_MONE_DEFA,               
    @VSCO_MONE_EXTR = CO_MONE_EXTR                       
  From  TMPARA_TESO                          
  Where  CO_EMPR = @ISCO_EMPR                 
 End              
                
 --Recuperamos Tipo Documento O/C              
 Select @VSTI_DOCU_ORCO = TI_DOCU               
 From   TTDOCU_CNTB                
 Where  ST_DOCU_0015 = 'S'              
                
 --Eliminamos Distribucion en el caso que exista registos para el doc.              
 Delete TDDISP_CCOS                
 Where  TDDISP_CCOS.CO_EMPR = @ISCO_EMPR              
 And    TDDISP_CCOS.CO_PROV = @ISCO_PROV                
 And    TDDISP_CCOS.CO_TIPO_DOCU = @ISCO_TIPO_DOCU              
 And    TDDISP_CCOS.NU_DOCU_PROV = @ISNU_DOCU_PROV              
               
 If @@Error != 0                
 Begin                
  Rollback Tran SP_TDDISP_INLO_I01                
  Return                
 End                
                
 Select @VNNU_SECU = 1                
                  
 -- Abrimos Cursor de movimientos 1.                
 OPEN CU_TDDISP_INLO_I01_1              
 FETCH  CU_TDDISP_INLO_I01_1              
 INTO   @CSCO_UNID, @CSCO_ALMA, @CSTI_DOCU_GUIN, @CSNU_DOCU_GUIN,                
   @CSTI_DOCU_ORIG, @CSNU_DOCU_ORIG, @CSCO_MONE_DOCU, @CSCO_MONE_ORDE, @CDFE_EMIS_DOCU, @CNFA_TIPO_CAMB              
                 
 While  @@fetch_status = 0                
 Begin                
  If @@error != 0                
  Begin                
   Rollback Tran SP_TDDISP_INLO_I01                
   Close CU_TDDISP_INLO_I01_1                
   Deallocate CU_TDDISP_INLO_I01_1                
   Return                
  End            
  
  ---Declaro Cursor 2, todos los movimientos                
  Declare CU_TDDISP_INLO_I01_2 Cursor              
  For              
  Select  t1.TI_DOCU, t1.NU_DOCU, t1.FE_DOCU, t2.TI_MOVI,                
    t2.CO_CNTA_EMPR, t1.TI_AUXI_EMPR, t1.CO_AUXI_EMPR, t1.CO_ORDE_SERV,                
    IsNull(t2.ST_ORCO, 'N'), IsNull(t2.ST_INGR_COMP, 'N'),                
    IsNull(t3.ST_EXTR, 'N'), IsNull(t3.ST_ATEN, 'N'),                
    IsNull(t2.ST_CNTA_EXIS,'N'), IsNull(t2.ST_CNTA_EXRE,'N')                
  From    TCDOCU_ALMA t1 Inner Join TTTIOP_LOGI t2               
  On  t2.CO_EMPR = t1.CO_EMPR                
  And     t2.TI_OPER = t1.TI_OPER Left Outer Join TCORDE_COMP t3               
  On  t3.NU_ORCO = t1.NU_ORCO                
  And     t3.CO_EMPR = t1.CO_EMPR              
  Where   t1.NU_DOCU = @CSNU_DOCU_GUIN                
  And     t1.TI_DOCU = @CSTI_DOCU_GUIN                
  And     t1.CO_ALMA = @CSCO_ALMA                
  And     t1.CO_UNID = @CSCO_UNID                
  And     t1.CO_EMPR = @ISCO_EMPR              
  And     t1.TI_SITU != 'ANU'                
  And     @CSNU_DOCU_GUIN Is Not Null                
  Union All                
  Select  @VSTI_DOCU_ORCO, t1.NU_ORCO, t1.FE_EMIS, 'I',               
    Null, t1.TI_AUXI_EMPR, t1.CO_AUXI_EMPR, t1.CO_ORDE_SERV,                
    'S', 'N', IsNull(t1.ST_EXTR, 'N') , IsNull(t1.ST_ATEN, 'N'), 'N', 'N'                
  From    TCORDE_COMP t1                
  Where   t1.NU_ORCO = @CSNU_DOCU_ORIG                
  And     t1.CO_EMPR = @ISCO_EMPR              
  And     t1.TI_SITU != 'ANU'                
  And    ( IsNull(t1.ST_ATEN, 'N') = 'N' And @CSNU_DOCU_GUIN Is Null )              
               
  -- Abrimos Cursor de Movimientos 2              
  OPEN CU_TDDISP_INLO_I01_2              
  FETCH  CU_TDDISP_INLO_I01_2              
  INTO   @CSTI_DOCU, @CSNU_DOCU, @CDFE_DOCU, @CSTI_MOVI,                
    @CSCO_CNTA_OPER, @CSTI_AUXI_CABE, @CSCO_AUXI_CABE, @CSCO_ORDE_CABE,                
  @CSST_ORCO, @CSST_INGR_COMP, @CSST_EXTR, @CSST_ATEN,                
    @CSST_CNTA_EXIS, @CSST_CNTA_EXRE              
                  
  While @@Fetch_Status = 0                
  Begin                
   If @@Error != 0                
   Begin                
    Rollback Tran SP_TDDISP_INLO_I01                
    Close CU_TDDISP_INLO_I01_2                
    Deallocate CU_TDDISP_INLO_I01_2                
    Close CU_TDDISP_INLO_I01_1                
    Deallocate CU_TDDISP_INLO_I01_1                
    Return                
   End                
                
   --Recupero Año y Mes de Proceso              
   Select @VNNU_ANNO = Year(@CDFE_DOCU)              
   Select @VNNU_MESE = Month(@CDFE_DOCU)                
              
   --Recupero Moneda Contabilidad              
   Select @VSCO_MONE_CNTB = CO_MONE                
   From   TTCNTB_EMPR, TMPARA_CONT                
   Where  TMPARA_CONT.CO_EMPR = @ISCO_EMPR               
   And    TTCNTB_EMPR.CO_EMPR = TMPARA_CONT.CO_EMPR                
   And    TTCNTB_EMPR.NU_CNTB_EMPR = TMPARA_CONT.NU_INFO_CORP               
                
   --Cuenta Existencia               
   --Evalua Obtenci¢n Cuenta Existencia x Almacen                
   IF @VSTI_CUEN_EXIS = 'A'              
   BEGIN               
    --Obtiene Cuenta de Existencia de Tabla de ALMACENES              
    Select  @VSCO_CNTA_EMPR = Case When @CSST_CNTA_EXIS = 'S' Then CO_CNTA_EXIS                
      Else Case When @CSST_CNTA_EXRE = 'S' Then CO_CNTA_EXRE End End                
    From    TMALMA                
    Where   CO_EMPR = @ISCO_EMPR           
    And     CO_UNID = @CSCO_UNID                
    And     CO_ALMA = @CSCO_ALMA              
              
    If LTrim(RTrim(IsNull(@VSCO_CNTA_EMPR,''))) = ''              
    Begin              
       Select @VSCO_CNTA_EMPR = NULL              
    End              
                 
    --Obtiene Parametros de Cuenta Contable              
    Select  @VSCO_MONE_CNTA = CO_MONE,              
      @VSST_MONE = ST_MONE,               
      @VSST_AUXI_CNTA = ST_AUXI_EMPR,              
      @VSST_DOCU_CNTA = ST_DOCU_CNTB,              
      @VSST_ORDE_CNTA = ST_ORDE_SERV                
    From TMPLAN_EMPR                
    Where   CO_EMPR = @ISCO_EMPR              
    And     CO_CNTA_EMPR = @VSCO_CNTA_EMPR              
              
    --Tipo de Operacion               
    If @CSTI_MOVI = 'S'              
    Begin               
     Select @VSTI_OPER = 'CAR'              
    End              
    Else             
    Begin              
     Select @VSTI_OPER = 'ABO'              
    End              
             
    --SELECT @ISCO_EMPR,@CSCO_UNID,@CSCO_ALMA,@CSTI_DOCU,@CSNU_DOCU      
                  
    ---Declaro Cursor 4, todos los movimientos               
    Declare CU_TDDISP_INLO_I01_4 Cursor               
    For              
    Select  t1.TI_AUXI_EMPR, t1.CO_AUXI_EMPR, t1.CO_ORDE_SERV, t1.CO_MONE,                
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                
      When @VSCO_MONE_NACI Then t1.FA_CAMB                
      Else t1.FA_CAMB_BASE End,                
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                
      When @VSCO_MONE_NACI Then t1.FA_CAMB_BASE                
      Else t1.FA_CAMB End,                
      t1.FA_CAMB, t1.FA_CAMB_BASE,                
      IsNull(Sum(Round(IsNull(t1.IM_COTO_ALMA, 0), 2)), 0),                
      IsNull(Sum(Round((IsNull(t1.CA_DOCU_MOVI, 0) * IsNull(t1.IM_COST_CORI,0)), 2)), 0)                
    From    TDDOCU_ALMA t1                
    Where   t1.CO_EMPR = @ISCO_EMPR              
    And     t1.CO_UNID = @CSCO_UNID                
    And     t1.CO_ALMA = @CSCO_ALMA                
    And     t1.TI_DOCU = @CSTI_DOCU                
    And     t1.NU_DOCU = @CSNU_DOCU               
    And     @CSST_EXTR = 'N'                
    And     t1.TI_SITU != 'ANU'                
    Group By t1.TI_AUXI_EMPR, t1.CO_AUXI_EMPR, t1.CO_ORDE_SERV, t1.CO_MONE, t1.FA_CAMB, t1.FA_CAMB_BASE                
    Union All                
    Select  t2.TI_AUXI_EMPR, t2.CO_AUXI_EMPR, t2.CO_ORDE_SERV, t2.CO_MONE,                
      Case t2.CO_MONE               
      When @VSCO_MONE_IMPO Then t2.FA_CAMB                
      When @VSCO_MONE_NACI Then t2.FA_CAMB                
      Else t2.FA_CAMB_BASE End,              
      Case t2.CO_MONE               
      When @VSCO_MONE_IMPO Then t2.FA_CAMB                
      When @VSCO_MONE_NACI Then t2.FA_CAMB_BASE                
      Else t2.FA_CAMB End,                
      t2.FA_CAMB, t2.FA_CAMB_BASE,                
      IsNull(Sum(Round(IsNull(t1.IM_UNIT, 0), 2)), 0),                
      IsNull(Sum(Round((IsNull(t1.CA_ORDE_ALMA, 0) * IsNull(t1.IM_UNIT, 0))-              
      ((IsNull(t1.IM_DCT1, 0) + IsNull(t1.IM_DCT2, 0)) + IsNull(t1.IM_PROR, 0)), 2)), 0)                
    From    TDORDE_COMP t1, TCORDE_COMP t2                
    Where   t1.NU_ORCO = @CSNU_DOCU_ORIG                
    And     t1.CO_EMPR = @ISCO_EMPR              
    And     @CSST_EXTR = 'S'                
    And     t2.TI_SITU != 'ANU'                
    And     t1.NU_ORCO = t2.NU_ORCO                
    And     t1.CO_EMPR = t2.CO_EMPR                  
    Group By t2.TI_AUXI_EMPR, t2.CO_AUXI_EMPR, t2.CO_ORDE_SERV, t2.CO_MONE, t2.FA_CAMB, t2.FA_CAMB_BASE              
                 
    --Abrimos Cursor 4              
    OPEN CU_TDDISP_INLO_I01_4              
    FETCH  CU_TDDISP_INLO_I01_4              
    INTO   @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1, @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI,                
      @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI, @CNFA_CAMB_M001, @CNFA_CONV_M001,                
      @CNIM_MOVI, @CNIM_MOVI_COMP              
              
    While @@Fetch_Status = 0                
    Begin                
     If @@Error != 0                
     Begin                
      Rollback Tran SP_TDDISP_INLO_I01                
      Close CU_TDDISP_INLO_I01_4                
      Close CU_TDDISP_INLO_I01_2                
      Close CU_TDDISP_INLO_I01_1                
      Deallocate CU_TDDISP_INLO_I01_4                
      Deallocate CU_TDDISP_INLO_I01_2                
      Deallocate CU_TDDISP_INLO_I01_1                
      Return                
     End                
             
                 
     --Datos de Tipo y C¢digo de Auxiliar              
     Select @VSTI_AUXI_EMPR = NULL              
     Select @VSCO_AUXI_EMPR = NULL                
                 
     IF @VSST_AUXI_CNTA = 'S'              
     Begin                
      Select @VSTI_AUXI_EMPR = @CSTI_AUXI_CAB1              
      Select @VSCO_AUXI_EMPR = @CSCO_AUXI_CAB1                
     End              
                   
     --Datos de Orden de Servicio              
     Select @VSCO_ORDE_SERV = NULL              
              
     IF @VSST_ORDE_CNTA = 'S'              
     Begin                
      Select @VSCO_ORDE_SERV = @CSCO_ORDE_CAB1       
     End              
              
     --Datos de Documento              
     Select @VSTI_DOCU = NULL                
     Select @VSNU_DOCU = NULL                
     Select @VDFE_DOCU = NULL              
              
     If @VSST_DOCU_CNTA = 'S'              
     Begin                
      Select @VSTI_DOCU = @CSTI_DOCU              
      Select @VSNU_DOCU = @CSNU_DOCU                
      Select @VDFE_DOCU = @CDFE_DOCU                
     End              
              
     Select @VNFA_CAMB      = @CNFA_CAMB_MOVI              
     Select @VNFA_CAMB_DIAR = @CNFA_CONV_MOVI                
     Select @VNIM_MVTO_ORIG = 0.00                  
     Select @VNIM_MVTO_CNTB = 0.00                       
                 
      
 If @CSST_ORCO = 'S' Or @CSST_INGR_COMP = 'S'              
     Begin              
      Exec OFIINTE.dbo.SP_TTPROC_INLO_Q02 @CSCO_MONE_MOVI, @VSCO_MONE_CNTA, @VSCO_MONE_CNTB, @VSCO_MONE_NACI,                
               @VSST_MONE, @CNFA_CAMB_M001, @CNFA_CONV_M001,                
               @CNIM_MOVI_COMP, @VNIM_MVTO_ORIG OUTPUT, @VNIM_MVTO_CNTB OUTPUT, @VSCO_MONE_ASTO OUTPUT              
     End              
     Else                
     Begin              
      Exec OFIINTE.dbo.SP_TTPROC_INLO_Q02 @VSCO_MONE_CPRO, @VSCO_MONE_CNTA, @VSCO_MONE_CNTB, @VSCO_MONE_NACI,                
               @VSST_MONE, @CNFA_CAMB_M001, @CNFA_CONV_M001,                
               @CNIM_MOVI, @VNIM_MVTO_ORIG OUTPUT, @VNIM_MVTO_CNTB OUTPUT, @VSCO_MONE_ASTO OUTPUT              
     End               
                   
     If @@Error != 0                
     Begin                
      Rollback Tran SP_TDDISP_INLO_I01                
      Close CU_TDDISP_INLO_I01_2                
      Deallocate CU_TDDISP_INLO_I01_2                
 Close CU_TDDISP_INLO_I01_1                
      Deallocate CU_TDDISP_INLO_I01_1                
      Return                
     End                
                 
     select   @CSNU_DOCU, @CSNU_DOCU, @VNIM_MVTO_ORIG , @VNIM_MVTO_CNTB , @VSCO_MONE_ASTO                    
                      
     --Tipo de Cambio 1, cuando Moneda del Asiento es la misma a la Moneda Contable              
     IF @VSCO_MONE_ASTO = @VSCO_MONE_CNTB               
     Begin              
      Select @VNFA_CAMB = 1                
     End              
                
     Select @VNNU_SECU = @VNNU_SECU + 1               
                 
     Select @VNIM_DIST = 0.00              
           
           
      If @CSCO_MONE_DOCU != @CSCO_MONE_ORDE              
      BEGIN              
       SELECT @VNIM_DIST = Round( OFITESO.dbo.FN_TCFACT_CAMB_Q02 ( @CSCO_MONE_ORDE, @CSCO_MONE_DOCU, @CDFE_EMIS_DOCU,              
            IsNull(@CNIM_MOVI_COMP, @VNIM_MVTO_ORIG), @VSTI_CAMB,              
            @VSTI_ORIG, 'S', @VSCO_MONE_TESO, @VSCO_MONE_EXTR, @CNFA_TIPO_CAMB), 4)              
      END              
      ELSE              
      BEGIN              
       SELECT @VNIM_DIST = IsNull(@CNIM_MOVI_COMP, @VNIM_MVTO_ORIG)              
      END              
       
     ---Graba Asiento Principal               
      Insert Into #TWDISP_CCOS                
      ( CO_EMPR, CO_PROV, CO_TIPO_DOCU, NU_DOCU_PROV,                
      NU_CORR, TI_AUXI_EMPR, CO_CENT_COST, CO_CNTA_EMPR,                
      CO_ORDE_SERV, ST_DIST, PO_DIST, IM_DIST, DE_OBSE, TI_DOCU, NU_DOCU, FE_VENC )                
      Values               
      ( @ISCO_EMPR, @ISCO_PROV, @ISCO_TIPO_DOCU, @ISNU_DOCU_PROV,                
      @VNNU_SECU, @VSTI_AUXI_EMPR, @VSCO_AUXI_EMPR, @VSCO_CNTA_EMPR,                
      @VSCO_ORDE_SERV, 'M', 0.00 , @VNIM_DIST, @VSDE_GLOS, @VSTI_DOCU, @VSNU_DOCU, @VDFE_DOCU )              
                  
            
     If @@Error != 0                
     Begin                
      Rollback Tran SP_TDDISP_INLO_I01                
      Close CU_TDDISP_INLO_I01_4                
      Close CU_TDDISP_INLO_I01_2                
      Close CU_TDDISP_INLO_I01_1                
      Deallocate CU_TDDISP_INLO_I01_4                
      Deallocate CU_TDDISP_INLO_I01_2                
      Deallocate CU_TDDISP_INLO_I01_1                
      Return                
     End                
                  
      Select @VNNU_SECU = @VNNU_SECU + 1              
                   
     Fetch  CU_TDDISP_INLO_I01_4                
     Into @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1, @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI,                
       @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI, @CNFA_CAMB_M001, @CNFA_CONV_M001,                
       @CNIM_MOVI, @CNIM_MOVI_COMP                
    End              
                 
    Close CU_TDDISP_INLO_I01_4                
    Deallocate CU_TDDISP_INLO_I01_4                
                  
   End --Cuenta Existencia x Almacen                      
                
   IF @VSTI_CUEN_EXIS = 'R' Or @VSTI_CUEN_EXIS = 'F' Or @VSTI_CUEN_EXIS = 'S' Or @VSTI_CUEN_EXIS = 'I'              
   BEGIN                
                       
    --Tipo de Operaci¢n              
    IF @CSTI_MOVI = 'S'              
    Begin              
     Select @VSTI_OPER = 'CAR'              
    End              
    Else                
    Begin              
     Select @VSTI_OPER = 'ABO'              
    End              
                  
    ---Declaro Cursor, Cuenta Existencia Nivel RUBRO                  
    Declare CU_TDDISP_INLO_I01_5 Cursor              
    For              
    Select  Case When @CSST_CNTA_EXIS = 'S' Then t3.CO_CNTA_EXIS                
      Else Case When @CSST_CNTA_EXRE = 'S' Then t3.CO_CNTA_EXRE End End,                
      IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE,                  
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB                  
      Else t1.FA_CAMB_BASE End,                 
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB_BASE                  
      Else t1.FA_CAMB End,                  
      t1.FA_CAMB, t1.FA_CAMB_BASE,                  
      IsNull(Sum(Round(IsNull(t1.IM_COTO_ALMA, 0), 2)), 0),                  
      IsNull(Sum(Round((IsNull(t1.CA_DOCU_MOVI, 0) * IsNull(t1.IM_COST_COMP,0)), 2)), 0)                  
    From    TDDOCU_ALMA t1, TMITEM t2, TTRUBR t3                  
    Where   t1.CO_EMPR = @ISCO_EMPR                 
    And     t1.CO_UNID = @CSCO_UNID                  
    And  t1.CO_ALMA = @CSCO_ALMA                  
    And     t1.TI_DOCU = @CSTI_DOCU                  
    And     t1.NU_DOCU = @CSNU_DOCU                  
    And     t1.TI_SITU != 'ANU'                  
    And     t2.CO_EMPR = t1.CO_EMPR                  
    And     t2.CO_ITEM = t1.CO_ITEM                  
    And     t3.CO_RUBR = t2.CO_RUBR                  
    And     t3.TI_ITEM = t2.TI_ITEM                  
    And     t3.CO_EMPR = t2.CO_EMPR                  
    And     t3.ST_CNTA_ALMA = 'N'                  
    Group By t2.CO_RUBR, t2.TI_ITEM,         
    Case When @CSST_CNTA_EXIS = 'S' Then t3.CO_CNTA_EXIS                
    Else Case When @CSST_CNTA_EXRE = 'S' Then t3.CO_CNTA_EXRE End End,                
    IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE, t1.FA_CAMB, t1.FA_CAMB_BASE                  
    Union                  
    Select  Case When @CSST_CNTA_EXIS = 'S' Then t4.CO_CNTA_EXIS                
      Else Case When @CSST_CNTA_EXRE = 'S' Then t4.CO_CNTA_EXRE End End,                
      IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE,                  
      Case t1.CO_MONE When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB                  
      Else t1.FA_CAMB_BASE End,              
      Case t1.CO_MONE When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB_BASE                  
      Else t1.FA_CAMB End,                  
      t1.FA_CAMB, t1.FA_CAMB_BASE,                  
      IsNull(Sum(Round(IsNull(t1.IM_COTO_ALMA, 0), 2)), 0),                  
      IsNull(Sum(Round((IsNull(t1.CA_DOCU_MOVI, 0) * IsNull(t1.IM_COST_COMP,0)), 2)), 0)                  
    From    TDDOCU_ALMA t1, TMITEM t2, TTRUBR t3, TTRUBR_ALMA t4                  
    Where   t1.CO_EMPR = @ISCO_EMPR                 
    And     t1.CO_UNID = @CSCO_UNID                  
    And     t1.CO_ALMA = @CSCO_ALMA                    
    And     t1.TI_DOCU = @CSTI_DOCU                  
    And     t1.NU_DOCU = @CSNU_DOCU                  
    And     t1.TI_SITU != 'ANU'                  
    And     t2.CO_EMPR = t1.CO_EMPR                  
    And     t2.CO_ITEM = t1.CO_ITEM                  
    And     t3.CO_RUBR = t2.CO_RUBR                  
    And     t3.TI_ITEM = t2.TI_ITEM                  
    And     t3.CO_EMPR = t2.CO_EMPR                  
    And     t3.ST_CNTA_ALMA = 'S'                  
    And     t4.CO_RUBR = t3.CO_RUBR                  
    And     t4.TI_ITEM = t3.TI_ITEM                  
    And     t4.CO_UNID = t1.CO_UNID                  
    And     t4.CO_ALMA = t1.CO_ALMA                  
    And     t4.CO_EMPR = t3.CO_EMPR                  
    Group By t2.CO_RUBR, t2.TI_ITEM,                 
    Case When @CSST_CNTA_EXIS = 'S' Then t4.CO_CNTA_EXIS                
    Else Case When @CSST_CNTA_EXRE = 'S' Then t4.CO_CNTA_EXRE End End,                 
    IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE, t1.FA_CAMB, t1.FA_CAMB_BASE               
              
    ---Declaro Cursor, Cuenta Existencia Nivel FAMILIA                
    Declare CU_TDDISP_INLO_I01_6 Cursor               
    For              
    Select  Case When @CSST_CNTA_EXIS = 'S' Then t3.CO_CNTA_EXIS                
      Else Case When @CSST_CNTA_EXRE = 'S' Then t3.CO_CNTA_EXRE End End,                 
      IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE,                  
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB                  
      Else t1.FA_CAMB_BASE End,              
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB_BASE                  
      Else t1.FA_CAMB End,                  
      t1.FA_CAMB, t1.FA_CAMB_BASE,                  
      IsNull(Sum(Round(IsNull(t1.IM_COTO_ALMA, 0), 2)), 0),                  
      IsNull(Sum(Round((IsNull(t1.CA_DOCU_MOVI, 0) * IsNull(t1.IM_COST_COMP, 0)),2)), 0)                  
    From    TDDOCU_ALMA t1, TMITEM t2, TTFAMI t3                
    Where   t1.CO_EMPR = @ISCO_EMPR               
    And     t1.CO_UNID = @CSCO_UNID                
    And     t1.CO_ALMA = @CSCO_ALMA                
    And     t1.TI_DOCU = @CSTI_DOCU                
    And     t1.NU_DOCU = @CSNU_DOCU                
    And     t1.TI_SITU != 'ANU'            
    And     t2.CO_EMPR = t1.CO_EMPR                
    And     t2.CO_ITEM = t1.CO_ITEM                
    And     t3.CO_FAMI = t2.CO_FAMI                
    And     t3.CO_RUBR = t2.CO_RUBR                
    And     t3.TI_ITEM = t2.TI_ITEM                
    And     t3.CO_EMPR = t2.CO_EMPR                
    And     t3.ST_CNTA_ALMA = 'N'                
    Group By t2.CO_RUBR,t2.CO_FAMI,t2.TI_ITEM,                      
    Case When @CSST_CNTA_EXIS = 'S' Then t3.CO_CNTA_EXIS                
    Else Case When @CSST_CNTA_EXRE = 'S' Then t3.CO_CNTA_EXRE End End,                 
    IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''),                  
    t1.CO_MONE, t1.FA_CAMB, t1.FA_CAMB_BASE                  
    Union  All                
    Select  Case When @CSST_CNTA_EXIS = 'S' Then t4.CO_CNTA_EXIS                
      Else Case When @CSST_CNTA_EXRE = 'S' Then t4.CO_CNTA_EXRE End End,                 
      IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''),                  
      IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE,                  
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB                  
      Else t1.FA_CAMB_BASE End,              
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB_BASE                  
      Else t1.FA_CAMB End,                  
      t1.FA_CAMB, t1.FA_CAMB_BASE,                  
      IsNull(Sum(Round(IsNull(t1.IM_COTO_ALMA, 0), 2)), 0),                  
      IsNull(Sum(Round((IsNull(t1.CA_DOCU_MOVI, 0) * IsNull(t1.IM_COST_COMP, 0)),2)), 0)                  
    From    TDDOCU_ALMA t1, TMITEM t2, TTFAMI t3, TTFAMI_ALMA t4                
    Where   t1.CO_EMPR = @ISCO_EMPR               
    And     t1.CO_UNID = @CSCO_UNID                
    And     t1.CO_ALMA = @CSCO_ALMA                
    And     t1.TI_DOCU = @CSTI_DOCU                
    And     t1.NU_DOCU = @CSNU_DOCU                
    And     t1.TI_SITU != 'ANU'                
    And     t2.CO_EMPR = t1.CO_EMPR                
    And     t2.CO_ITEM = t1.CO_ITEM                
    And     t3.CO_FAMI = t2.CO_FAMI                
    And     t3.CO_RUBR = t2.CO_RUBR                
    And     t3.TI_ITEM = t2.TI_ITEM                
    And     t3.CO_EMPR = t2.CO_EMPR                
    And     t3.ST_CNTA_ALMA = 'S'                
    And  (@CSST_ATEN = 'S' And @CSST_EXTR = 'N')                
    And     t4.CO_FAMI = t3.CO_FAMI                
    And     t4.CO_RUBR = t3.CO_RUBR                
    And     t4.TI_ITEM = t3.TI_ITEM                
  And     t4.CO_UNID = t1.CO_UNID                
    And     t4.CO_ALMA = t1.CO_ALMA                
    And     t4.CO_EMPR = t3.CO_EMPR                
    Group By t2.CO_RUBR,t2.CO_FAMI,t2.TI_ITEM,                      
    Case When @CSST_CNTA_EXIS = 'S' Then t4.CO_CNTA_EXIS                
    Else Case When @CSST_CNTA_EXRE = 'S' Then t4.CO_CNTA_EXRE End End,                 
    IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''),               
    t1.CO_MONE, t1.FA_CAMB, t1.FA_CAMB_BASE                  
    Union  All                
    Select  Case When @CSST_EXTR = 'N' And @CSST_ATEN = 'N' Then t3.CO_CNTA_COMP                
      Else t3.CO_CNTA_COMP  End,                 
      t4.TI_AUXI_EMPR, t4.CO_AUXI_EMPR, t4.CO_ORDE_SERV, t4.CO_MONE,                
      Case t4.CO_MONE               
      When @VSCO_MONE_IMPO Then t4.FA_CAMB                
      When @VSCO_MONE_NACI Then t4.FA_CAMB                
      Else t4.FA_CAMB_BASE End,                
      Case t4.CO_MONE               
      When @VSCO_MONE_IMPO Then t4.FA_CAMB                
      When @VSCO_MONE_NACI Then t4.FA_CAMB_BASE                
      Else t4.FA_CAMB End,                
      t4.FA_CAMB, t4.FA_CAMB_BASE,                
      IsNull(Sum(Round(IsNull(t1.IM_UNIT, 0), 2)), 0),             
      --- IsNull( Round(  Sum( IsNull(t1.CA_ORDE, 0)* (IsNull(t1.IM_UNIT,0)-((IsNull(t1.IM_DCT1, 0) + IsNull(t1.IM_DCT2, 0)))+ IsNull(t1.IM_PROR, 0)) ) , 2), 0)              
      --- Incluye prorrrateo y Descuentos                 
      IsNull(Round(Sum(IsNull(t1.CA_ORDE, 0)* Round(IsNull(t1.IM_UNIT, 0)-(( IsNull(t1.IM_DCT1, 0) + IsNull(t1.IM_DCT2, 0) )) + IsNull(t1.IM_PROR, 0),5)), 2), 0)              
      --- Incluye prorrrateo y Descuentos                 
    From    TDORDE_COMP t1, TCORDE_COMP t4, TMITEM t2, TTFAMI t3                
    Where   t1.CO_EMPR = @ISCO_EMPR               
    And     t1.NU_ORCO = @CSNU_DOCU_ORIG                
    And     t4.CO_EMPR = t1.CO_EMPR                
    And     t4.NU_ORCO = t1.NU_ORCO                
    And     t4.TI_SITU != 'ANU'                
    And     t2.CO_EMPR = t1.CO_EMPR                
    And     t2.CO_ITEM = t1.CO_ITEM                
    And     t3.CO_RUBR = t2.CO_RUBR                
    And     t3.TI_ITEM = t2.TI_ITEM                
    And     t3.CO_EMPR = t2.CO_EMPR                
    And     t3.ST_CNTA_ALMA = 'N'                
    And  @CSST_EXTR = 'S'               
    And  @CSNU_DOCU_GUIN Is Null                
    And     t3.CO_FAMI = t2.CO_FAMI                
    And     t3.CO_RUBR = t2.CO_RUBR                
    And     t3.TI_ITEM = t2.TI_ITEM                
    Group By t2.CO_RUBR, t2.TI_ITEM,                
    Case When @CSST_EXTR = 'N' And @CSST_ATEN = 'N' Then t3.CO_CNTA_COMP                
    Else t3.CO_CNTA_COMP End,              
    t3.CO_CNTA_PTIM, t4.TI_AUXI_EMPR, t4.CO_AUXI_EMPR,                
    t4.CO_ORDE_SERV, t4.CO_MONE, t4.FA_CAMB, t4.FA_CAMB_BASE                
              
    ---Declaro Cursor, Cuenta Existencia Nivel SUB - FAMILIA                
    Declare CU_TDDISP_INLO_I01_7 Cursor               
    For              
    Select  Case When @CSST_CNTA_EXIS = 'S' Then t3.CO_CNTA_EXIS                
      Else Case When @CSST_CNTA_EXRE = 'S' Then t3.CO_CNTA_EXRE End End,                    
      IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE,                  
      Case t1.CO_MONE When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB                  
      Else t1.FA_CAMB_BASE End,                  
      Case t1.CO_MONE When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB_BASE                  
      Else t1.FA_CAMB End,                  
      t1.FA_CAMB, t1.FA_CAMB_BASE,                  
      IsNull(Sum(Round(IsNull(t1.IM_COTO_ALMA, 0), 2)), 0),                  
      IsNull(Sum(Round((IsNull(t1.CA_DOCU_MOVI, 0) * IsNull(t1.IM_COST_COMP, 0)),2)), 0)                  
    From    TDDOCU_ALMA t1, TMITEM t2, TTSFAM t3                  
    Where   t1.CO_EMPR = @ISCO_EMPR                 
    And     t1.CO_UNID = @CSCO_UNID                  
    And     t1.CO_ALMA = @CSCO_ALMA                  
    And     t1.TI_DOCU = @CSTI_DOCU                  
    And     t1.NU_DOCU = @CSNU_DOCU                  
    And     t1.TI_SITU != 'ANU'                  
    And     t2.CO_EMPR = t1.CO_EMPR                  
    And     t2.CO_ITEM = t1.CO_ITEM                  
    And     t3.CO_SFAM = t2.CO_SFAM                  
    And     t3.CO_FAMI = t2.CO_FAMI                  
    And     t3.CO_RUBR = t2.CO_RUBR                  
    And     t3.TI_ITEM = t2.TI_ITEM                  
    And     t3.CO_EMPR = t2.CO_EMPR                  
    And     t3.ST_CNTA_ALMA = 'N'                  
    Group By t2.CO_RUBR, t2.CO_FAMI, t2.CO_SFAM, t2.TI_ITEM,                  
    Case When @CSST_CNTA_EXIS = 'S' Then t3.CO_CNTA_EXIS                
    Else Case When @CSST_CNTA_EXRE = 'S' Then t3.CO_CNTA_EXRE End End,                 
    IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''),                  
    t1.CO_MONE, t1.FA_CAMB, t1.FA_CAMB_BASE            
    Union  --verificar si es UNION o UNION ALL      
    Select  Case When @CSST_CNTA_EXIS = 'S' Then t4.CO_CNTA_EXIS                
      Else Case When @CSST_CNTA_EXRE = 'S' Then t4.CO_CNTA_EXRE End End,                 
      IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE,                  
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB                  
      Else t1.FA_CAMB_BASE End,                  
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB_BASE                  
      Else t1.FA_CAMB End,                  
      t1.FA_CAMB, t1.FA_CAMB_BASE,                  
      IsNull(Sum(Round(IsNull(t1.IM_COTO_ALMA, 0), 2)), 0),                  
      IsNull(Sum(Round((IsNull(t1.CA_DOCU_MOVI, 0) * IsNull(t1.IM_COST_COMP,0)), 2)), 0)                  
    From    TDDOCU_ALMA t1, TMITEM t2, TTSFAM t3, TTSFAM_ALMA t4                  
    Where   t1.CO_EMPR = @ISCO_EMPR                 
    And     t1.CO_UNID = @CSCO_UNID                  
  And     t1.CO_ALMA = @CSCO_ALMA                  
    And     t1.TI_DOCU = @CSTI_DOCU                  
    And     t1.NU_DOCU = @CSNU_DOCU                  
    And     t1.TI_SITU != 'ANU'                  
    And     t2.CO_EMPR = t1.CO_EMPR                  
    And     t2.CO_ITEM = t1.CO_ITEM                  
    And     t3.CO_SFAM = t2.CO_SFAM                  
    And     t3.CO_FAMI = t2.CO_FAMI                  
    And     t3.CO_RUBR = t2.CO_RUBR                  
    And     t3.TI_ITEM = t2.TI_ITEM                  
    And     t3.CO_EMPR = t2.CO_EMPR           
    And     t3.ST_CNTA_ALMA = 'S'                  
    And     t4.CO_SFAM = t3.CO_SFAM                  
    And     t4.CO_FAMI = t3.CO_FAMI                  
    And     t4.CO_RUBR = t3.CO_RUBR                  
    And     t4.TI_ITEM = t3.TI_ITEM             
    And     t4.CO_UNID = t1.CO_UNID                  
    And     t4.CO_ALMA = t1.CO_ALMA                  
    And     t4.CO_EMPR = t3.CO_EMPR                  
    Group By t2.CO_RUBR, t2.CO_FAMI, t2.CO_SFAM, t2.TI_ITEM,                  
    Case When @CSST_CNTA_EXIS = 'S' Then t4.CO_CNTA_EXIS                
    Else Case When @CSST_CNTA_EXRE = 'S' Then t4.CO_CNTA_EXRE End End,                 
    IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''),                  
    t1.CO_MONE, t1.FA_CAMB, t1.FA_CAMB_BASE                
              
              
              
    ---Declaro Cursor, Cuenta Existencia Nivel ARTICULO - ALMACEN                
    Declare CU_TDDISP_INLO_I01_8 Cursor               
    For              
    Select  Case When @CSST_CNTA_EXIS = 'S' Then t2.CO_CNTA_EXIS                
      Else Case When @CSST_CNTA_EXRE = 'S' Then t2.CO_CNTA_EXRE End End,                 
      IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE,                  
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB                  
      Else t1.FA_CAMB_BASE End,                  
      Case t1.CO_MONE               
      When @VSCO_MONE_IMPO Then t1.FA_CAMB                  
      When @VSCO_MONE_NACI Then t1.FA_CAMB_BASE                  
      Else t1.FA_CAMB End,                  
      t1.FA_CAMB, t1.FA_CAMB_BASE,                  
      IsNull(Sum(Round(IsNull(t1.IM_COTO_ALMA, 0), 2)), 0),                  
      IsNull(Sum(Round((IsNull(t1.CA_DOCU_MOVI, 0) * IsNull(t1.IM_COST_COMP, 0)),2)), 0)                  
    From    TDDOCU_ALMA t1, TMITEM t2                
    Where   t1.CO_EMPR = @ISCO_EMPR                 
    And     t1.CO_UNID = @CSCO_UNID                  
    And     t1.CO_ALMA = @CSCO_ALMA                  
    And     t1.TI_DOCU = @CSTI_DOCU                  
    And     t1.NU_DOCU = @CSNU_DOCU                  
    And     t1.TI_SITU != 'ANU'           
    And     t2.CO_EMPR = t1.CO_EMPR                  
    --And     t2.CO_UNID = t1.CO_UNID                  
    --And     t2.CO_ALMA = t1.CO_ALMA                  
    And     t2.CO_ITEM = t1.CO_ITEM        
    --And     t2.ST_INTE_CNTB = 'S'                  
    Group By Case When @CSST_CNTA_EXIS = 'S' Then t2.CO_CNTA_EXIS                
    Else Case When @CSST_CNTA_EXRE = 'S' Then t2.CO_CNTA_EXRE End End,                 
    IsNull(t1.TI_AUXI_EMPR,''), IsNull(t1.CO_AUXI_EMPR,''), IsNull(t1.CO_ORDE_SERV,''), t1.CO_MONE, t1.FA_CAMB, t1.FA_CAMB_BASE                
            
    --Verificamos el tipo de Opcion de Configuracion:                
    If @VSTI_CUEN_EXIS = 'R'                
    Begin              
     Open   CU_TDDISP_INLO_I01_5              
     Fetch  CU_TDDISP_INLO_I01_5                
     Into   @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP              
    End              
              
    If @VSTI_CUEN_EXIS = 'F'               
    Begin              
     Open   CU_TDDISP_INLO_I01_6              
     Fetch  CU_TDDISP_INLO_I01_6                
     Into   @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP              
    End              
              
    If @VSTI_CUEN_EXIS = 'S'              
    Begin              
     Open   CU_TDDISP_INLO_I01_7              
     Fetch  CU_TDDISP_INLO_I01_7                
     Into   @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP              
  End                                                       
              
    If @VSTI_CUEN_EXIS = 'I'               
    Begin              
     Open  CU_TDDISP_INLO_I01_8              
     Fetch  CU_TDDISP_INLO_I01_8                
     Into @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP              
    End                                                       
              
    While @@Fetch_Status = 0                
    Begin                
     If @@Error != 0                
     Begin                
      If @VSTI_CUEN_EXIS = 'R'                
       Close CU_TDDISP_INLO_I01_5                
      If @VSTI_CUEN_EXIS = 'F'                
       Close CU_TDDISP_INLO_I01_6                
      If @VSTI_CUEN_EXIS = 'S'                
       Close CU_TDDISP_INLO_I01_7                
      If @VSTI_CUEN_EXIS = 'I'                
       Close CU_TDDISP_INLO_I01_8                
                     
      Deallocate CU_TDDISP_INLO_I01_5                
      Deallocate CU_TDDISP_INLO_I01_6                
      Deallocate CU_TDDISP_INLO_I01_7                
      Deallocate CU_TDDISP_INLO_I01_8                
                    
      Close CU_TDDISP_INLO_I01_2                
      Deallocate CU_TDDISP_INLO_I01_2              
                    
      Close CU_TDDISP_INLO_I01_1              
      Deallocate CU_TDDISP_INLO_I01_1              
                    
      Rollback Tran SP_TDDISP_INLO_I01              
      Return                
     End                
            
     --select @CSST_CNTA_EXIS, @CSST_CNTA_EXRE, @ISCO_EMPR, @CSCO_UNID, @CSCO_ALMA, @CSTI_DOCU, @CSNU_DOCU, @CSNU_DOCU_ORIG      
                  
     Select @VSDE_GLOS = 'INTE. LOGISTICA ' +               
          @ISCO_EMPR + ' ' + IsNull(@CSCO_UNID,'NA') + ' ' + IsNull(@CSCO_ALMA,'NA') + ' ' +               
          @CSTI_DOCU + ' ' + @CSNU_DOCU + ' ' + Convert(Varchar(10), @CDFE_DOCU,103) + ' ' + IsNull(@VSTI_CUEN_EXIS,'X')              
            
  /*    SELECT @ISCO_EMPR ,@CSCO_UNID ,@CSCO_ALMA ,@CSTI_DOCU ,@CSNU_DOCU , @CSST_CNTA_EXIS, @CSST_CNTA_EXRE      
      select @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP            
                  */      
     IF LTrim(RTrim(IsNull(@CSCO_CNTA_CAB1,''))) = ''              
     Begin              
      Select @VSCO_CNTA_EMPR = NULL              
     End              
     Else              
     Begin                  
      Select @VSCO_CNTA_EMPR = @CSCO_CNTA_CAB1              
     End              
          
              
     --Verifica si existe valor en @VSCO_CNTA_EMPR para grabar Dist.             
                        
     If @VSCO_CNTA_EMPR IS NOT NULL              
     Begin              
                
      --Obtiene Parametros de Cuenta Contable              
      Select  @VSCO_MONE_CNTA = CO_MONE,              
        @VSST_MONE = ST_MONE,              
        @VSST_AUXI_CNTA = ST_AUXI_EMPR,              
        @VSST_DOCU_CNTA = ST_DOCU_CNTB,              
        @VSST_ORDE_CNTA = ST_ORDE_SERV                
      From    TMPLAN_EMPR                
      Where   CO_EMPR = @ISCO_EMPR              
      And     CO_CNTA_EMPR = @VSCO_CNTA_EMPR              
              
      --Datos de Tipo y C¢digo de Auxiliar              
      Select @VSTI_AUXI_EMPR = NULL              
      Select @VSCO_AUXI_EMPR = NULL              
              
      If @VSST_AUXI_CNTA = 'S'                
      Begin                
       Select @VSTI_AUXI_EMPR = @CSTI_AUXI_CAB1              
       Select @VSCO_AUXI_EMPR = @CSCO_AUXI_CAB1              
      End              
              
      --Datos de Orden de Servicio              
      Select @VSCO_ORDE_SERV = Null              
              
      IF @VSST_ORDE_CNTA = 'S'               
      Begin              
       Select @VSCO_ORDE_SERV = @CSCO_ORDE_CAB1              
      End              
              
      --Datos de Documento              
      Select @VSTI_DOCU = Null                
      Select @VSNU_DOCU = Null                
      Select @VDFE_DOCU = Null                
              
      If @VSST_DOCU_CNTA = 'S'                
      Begin              
       Select @VSTI_DOCU = @CSTI_DOCU                
       Select @VSNU_DOCU = @CSNU_DOCU                
       Select @VDFE_DOCU = @CDFE_DOCU                
      End               
              
      Select @VNFA_CAMB = @CNFA_CAMB_MOVI                
      Select @VNFA_CAMB_DIAR = @CNFA_CONV_MOVI                
      Select @VNIM_MVTO_ORIG = 0.00              
      Select @VNIM_MVTO_CNTB = 0.00                
                   
                  
                   
      --Obtiene Monto Origen y Monto Contable               
      If @CSST_ORCO = 'S' Or @CSST_INGR_COMP = 'S'               
      Begin              
       Exec OFIINTE.dbo.SP_TTPROC_INLO_Q02 @CSCO_MONE_MOVI, @VSCO_MONE_CNTA, @VSCO_MONE_CNTB, @VSCO_MONE_NACI,               
                @VSST_MONE, @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI_COMP,               
                @VNIM_MVTO_ORIG OUTPUT, @VNIM_MVTO_CNTB OUTPUT, @VSCO_MONE_ASTO OUTPUT              
      End              
      Else              
      Begin              
       Exec OFIINTE.dbo.SP_TTPROC_INLO_Q02 @VSCO_MONE_CPRO, @VSCO_MONE_CNTA, @VSCO_MONE_CNTB, @VSCO_MONE_NACI,               
                @VSST_MONE, @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI,               
                @VNIM_MVTO_ORIG OUTPUT, @VNIM_MVTO_CNTB OUTPUT, @VSCO_MONE_ASTO OUTPUT              
      End                                               
                    
      If @@Error != 0                
      Begin                
       If @VSTI_CUEN_EXIS = 'R'                
        Close CU_TDDISP_INLO_I01_5                
       If @VSTI_CUEN_EXIS = 'F'                
        Close CU_TDDISP_INLO_I01_6                
       If @VSTI_CUEN_EXIS = 'S'                
        Close CU_TDDISP_INLO_I01_7                
       If @VSTI_CUEN_EXIS = 'I'                
        Close CU_TDDISP_INLO_I01_8                
                      
       Deallocate CU_TDDISP_INLO_I01_5                
       Deallocate CU_TDDISP_INLO_I01_6                
       Deallocate CU_TDDISP_INLO_I01_7                
       Deallocate CU_TDDISP_INLO_I01_8                
                     
       Close CU_TDDISP_INLO_I01_2                
       Deallocate CU_TDDISP_INLO_I01_2              
                     
       Close CU_TDDISP_INLO_I01_1              
       Deallocate CU_TDDISP_INLO_I01_1              
                     
       Rollback Tran SP_TDDISP_INLO_I01              
       Return                 
      End              
                  
                     
             
      --Tipo de Cambio 1, Cuando Moneda del Asiento es la misma a la Moneda Contable              
      If @VSCO_MONE_ASTO = @VSCO_MONE_CNTB                
      Begin              
       Select @VNFA_CAMB = 1              
      End              
                    
      Select @VNIM_DIST = 0.00              
                    
      If @CSCO_MONE_DOCU != @CSCO_MONE_ORDE              
      BEGIN              
       SELECT @VNIM_DIST = Round( OFITESO.dbo.FN_TCFACT_CAMB_Q02 ( @CSCO_MONE_ORDE, @CSCO_MONE_DOCU, @CDFE_EMIS_DOCU,              
            IsNull(@CNIM_MOVI_COMP, @VNIM_MVTO_ORIG), @VSTI_CAMB,              
            @VSTI_ORIG, 'S', @VSCO_MONE_TESO, @VSCO_MONE_EXTR, @CNFA_TIPO_CAMB), 4)              
      END              
      ELSE              
      BEGIN              
       SELECT @VNIM_DIST = IsNull(@CNIM_MOVI_COMP, @VNIM_MVTO_ORIG)              
      END              
              
      ---Graba Asiento Principal               
      Insert Into #TWDISP_CCOS                
      ( CO_EMPR, CO_PROV, CO_TIPO_DOCU, NU_DOCU_PROV,                
      NU_CORR, TI_AUXI_EMPR, CO_CENT_COST, CO_CNTA_EMPR,                
      CO_ORDE_SERV, ST_DIST, PO_DIST, IM_DIST, DE_OBSE, TI_DOCU, NU_DOCU, FE_VENC )                
      Values                   ( @ISCO_EMPR, @ISCO_PROV, @ISCO_TIPO_DOCU, @ISNU_DOCU_PROV,                
      @VNNU_SECU, @VSTI_AUXI_EMPR, @VSCO_AUXI_EMPR, @VSCO_CNTA_EMPR,                
      @VSCO_ORDE_SERV, 'M', 0.00 , @VNIM_DIST, @VSDE_GLOS, @VSTI_DOCU, @VSNU_DOCU, @VDFE_DOCU )              
                    
      If @@Error != 0                
      Begin                
       If @VSTI_CUEN_EXIS = 'R'                
        Close CU_TDDISP_INLO_I01_5                
       If @VSTI_CUEN_EXIS = 'F'                
        Close CU_TDDISP_INLO_I01_6                
       If @VSTI_CUEN_EXIS = 'S'                
        Close CU_TDDISP_INLO_I01_7                
       If @VSTI_CUEN_EXIS = 'I'                
        Close CU_TDDISP_INLO_I01_8                
                      
       Deallocate CU_TDDISP_INLO_I01_5                
       Deallocate CU_TDDISP_INLO_I01_6                
       Deallocate CU_TDDISP_INLO_I01_7                
       Deallocate CU_TDDISP_INLO_I01_8                
                     
       Close CU_TDDISP_INLO_I01_2                
       Deallocate CU_TDDISP_INLO_I01_2              
                     
       Close CU_TDDISP_INLO_I01_1              
       Deallocate CU_TDDISP_INLO_I01_1              
                     
       Rollback Tran SP_TDDISP_INLO_I01              
       Return                 
      End              
                 
      Select @VNNU_SECU = @VNNU_SECU + 1              
              
     End              
                   
     If @VSTI_CUEN_EXIS = 'R'                
     Begin                
     Fetch  CU_TDDISP_INLO_I01_5                
     Into   @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP                
     End                
              
     If @VSTI_CUEN_EXIS = 'F'                
     Begin                
     Fetch  CU_TDDISP_INLO_I01_6                
     Into   @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP                
     End                
              
     If @VSTI_CUEN_EXIS = 'S'                
     Begin                
     Fetch  CU_TDDISP_INLO_I01_7                
     Into   @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP              
     End                
              
     If @VSTI_CUEN_EXIS = 'I'                
     Begin                
     Fetch  CU_TDDISP_INLO_I01_8                
     Into @CSCO_CNTA_CAB1, @CSTI_AUXI_CAB1, @CSCO_AUXI_CAB1,                
       @CSCO_ORDE_CAB1, @CSCO_MONE_MOVI, @CNFA_CAMB_MOVI, @CNFA_CONV_MOVI,                
       @CNFA_CAMB_M001, @CNFA_CONV_M001, @CNIM_MOVI, @CNIM_MOVI_COMP                
     End                
              
     Select @VSCO_CNTA_PTIM = @CSCO_CNTA_PTIM              
    End               
                  
    If @VSTI_CUEN_EXIS = 'R'                
     Close CU_TDDISP_INLO_I01_5                
    If @VSTI_CUEN_EXIS = 'F'                
     Close CU_TDDISP_INLO_I01_6                
    If @VSTI_CUEN_EXIS = 'S'                
     Close CU_TDDISP_INLO_I01_7                
    If @VSTI_CUEN_EXIS = 'I'                
     Close CU_TDDISP_INLO_I01_8                
                   
    Deallocate CU_TDDISP_INLO_I01_5                
    Deallocate CU_TDDISP_INLO_I01_6                
    Deallocate CU_TDDISP_INLO_I01_7                
    Deallocate CU_TDDISP_INLO_I01_8                
                  
    If @@Error != 0                
    Begin                
     Rollback Tran SP_TDDISP_INLO_I01                
     Close CU_TDDISP_INLO_I01_2                
     Deallocate CU_TDDISP_INLO_I01_2                
     Close CU_TDDISP_INLO_I01_1                
     Deallocate CU_TDDISP_INLO_I01_1                
     Return                
    End                
   End  --Fin de si Cuenta Existencia es 'R' o 'F' o 'S' o 'I'               
                       
   FETCH  CU_TDDISP_INLO_I01_2              
   INTO   @CSTI_DOCU, @CSNU_DOCU, @CDFE_DOCU, @CSTI_MOVI,                
     @CSCO_CNTA_OPER, @CSTI_AUXI_CABE, @CSCO_AUXI_CABE, @CSCO_ORDE_CABE,                
     @CSST_ORCO, @CSST_INGR_COMP, @CSST_EXTR, @CSST_ATEN,                
     @CSST_CNTA_EXIS, @CSST_CNTA_EXRE                
  End                
                
  Close CU_TDDISP_INLO_I01_2                
  Deallocate CU_TDDISP_INLO_I01_2                
              
  FETCH  CU_TDDISP_INLO_I01_1              
  INTO   @CSCO_UNID, @CSCO_ALMA, @CSTI_DOCU_GUIN, @CSNU_DOCU_GUIN,                
    @CSTI_DOCU_ORIG, @CSNU_DOCU_ORIG, @CSCO_MONE_DOCU, @CSCO_MONE_ORDE, @CDFE_EMIS_DOCU, @CNFA_TIPO_CAMB              
 End               
               
 Close CU_TDDISP_INLO_I01_1                
 Deallocate CU_TDDISP_INLO_I01_1              
              
 --Actualizamos porcentaje de distribucion              
 Update #TWDISP_CCOS                
 Set     #TWDISP_CCOS.PO_DIST = ( IM_DIST / ( Select  Sum(t2.IM_DIST)                
            From    #TWDISP_CCOS t2                
            Where   t2.CO_EMPR = #TWDISP_CCOS.CO_EMPR               
            And     t2.CO_PROV = #TWDISP_CCOS.CO_PROV               
            And     t2.CO_TIPO_DOCU = #TWDISP_CCOS.CO_TIPO_DOCU               
            And     t2.NU_DOCU_PROV = #TWDISP_CCOS.NU_DOCU_PROV )) * 100                
 Where   #TWDISP_CCOS.CO_EMPR = @ISCO_EMPR                
 And   #TWDISP_CCOS.CO_PROV = @ISCO_PROV              
 And   #TWDISP_CCOS.CO_TIPO_DOCU = @ISCO_TIPO_DOCU              
 And   #TWDISP_CCOS.NU_DOCU_PROV = @ISNU_DOCU_PROV               
              
 If @@Error != 0                
 Begin                
  Rollback Tran SP_TDDISP_INLO_I01                
  Return                
 End                
                  
 --Obtenemos ultimo correlativo de dist.              
 Select @VNNU_CORR = Max(IsNull(NU_CORR,0))              
 From    #TWDISP_CCOS                
 Where   #TWDISP_CCOS.CO_EMPR = @ISCO_EMPR              
 And     #TWDISP_CCOS.CO_PROV = @ISCO_PROV              
 And     #TWDISP_CCOS.CO_TIPO_DOCU = @ISCO_TIPO_DOCU              
 And     #TWDISP_CCOS.NU_DOCU_PROV = @ISNU_DOCU_PROV              
               
 Select @VNNU_SECU = @VNNU_CORR              
                
 --Verificamos Flete , y demas Gastos generamos asiento Individuales x c/u de estos conceptos                
 --Orden / Comp Nacionales                
 Select  @VNIM_GAFO = Sum(PatIndex('S',TCORDE_COMP.ST_AFEC_GAFO )* TCORDE_COMP.IM_GAFO),                
   @VNIM_SEGU = Sum(PatIndex('S',TCORDE_COMP.ST_AFEC_SEGU )* TCORDE_COMP.IM_SEGU),                
   @VNIM_FLET = Sum(PatIndex('S',TCORDE_COMP.ST_AFEC_FLET )* TCORDE_COMP.IM_FLET)                 
 From    TCORDE_COMP                
 Where   TCORDE_COMP.CO_EMPR = @ISCO_EMPR              
 And     TCORDE_COMP.ST_EXTR = 'N'                 
 And     Exists (Select TDORDE_FACT.NU_DOCU_ORIG                 
     From    TDORDE_FACT                
     Where   TDORDE_FACT.CO_PROV = @ISCO_PROV              
     And     TDORDE_FACT.CO_TIPO_DOCU = @ISCO_TIPO_DOCU              
     And     TDORDE_FACT.NU_DOCU_PROV = @ISNU_DOCU_PROV               
     And     TDORDE_FACT.CO_EMPR = TCORDE_COMP.CO_EMPR               
     And     TDORDE_FACT.NU_DOCU_ORIG = TCORDE_COMP.NU_ORCO               
     And     TDORDE_FACT.TI_DOCU_GUIN Is Null               
     And     TDORDE_FACT.NU_DOCU_GUIN Is Null)                
 Group By TCORDE_COMP.CO_EMPR, TCORDE_COMP.NU_ORCO              
              
 --Orden / Comp Extranjera                
 Select  @VNIM_GAFO = Sum(PatIndex('S', TMDOCU_PROV.ST_AFEC_GAFI ) * TMDOCU_PROV.IM_GAFI),                
   @VNIM_SEGU = Sum(PatIndex('S', TMDOCU_PROV.ST_AFEC_MORA ) * TMDOCU_PROV.IM_MORA),                
   @VNIM_FLET = Sum(PatIndex('S', TMDOCU_PROV.ST_AFEC_FLET ) * TMDOCU_PROV.IM_FLET)                
 From    TMDOCU_PROV                
 Where   TMDOCU_PROV.CO_EMPR = @ISCO_EMPR              
 And     TMDOCU_PROV.CO_PROV = @ISCO_PROV               
 And     TMDOCU_PROV.CO_TIPO_DOCU = @ISCO_TIPO_DOCU              
 And     TMDOCU_PROV.NU_DOCU_PROV = @ISNU_DOCU_PROV                 
 And     Exists (Select TDORDE_FACT.NU_DOCU_ORIG                 
     From    TCORDE_COMP, TDORDE_FACT                
     Where   TDORDE_FACT.CO_EMPR = TMDOCU_PROV.CO_EMPR               
     And     TDORDE_FACT.CO_PROV = TMDOCU_PROV.CO_PROV               
     And     TDORDE_FACT.CO_TIPO_DOCU = TMDOCU_PROV.CO_TIPO_DOCU               
     And     TDORDE_FACT.NU_DOCU_PROV = TMDOCU_PROV.NU_DOCU_PROV               
     And     TDORDE_FACT.CO_EMPR = TCORDE_COMP.CO_EMPR               
     And     TDORDE_FACT.NU_DOCU_ORIG = TCORDE_COMP.NU_ORCO               
     And     TDORDE_FACT.TI_DOCU_GUIN Is Null               
     And     TDORDE_FACT.NU_DOCU_GUIN Is Null               
     And     TCORDE_COMP.ST_EXTR = 'S')              
                
 If IsNull(@VNIM_GAFO,0) != 0              
 Begin                
                
  --Graba Asiento Financieros              
  Insert Into #TWDISP_CCOS                
  ( CO_EMPR, CO_PROV , CO_TIPO_DOCU, NU_DOCU_PROV,              
  NU_CORR, TI_AUXI_EMPR, CO_CENT_COST, CO_CNTA_EMPR,                
  CO_ORDE_SERV, ST_DIST, PO_DIST, IM_DIST, DE_OBSE )                
  Select CO_EMPR, CO_PROV , CO_TIPO_DOCU, NU_DOCU_PROV,                
    NU_CORR + @VNNU_CORR, TI_AUXI_EMPR, CO_CENT_COST, @VSCO_CNTA_PTIM,                
    CO_ORDE_SERV, ST_DIST, PO_DIST, Round(IsNull(@VNIM_GAFO * (PO_DIST/100),0),2), 'GASTOS FINANCIEROS PRORRATEADO'           
  From #TWDISP_CCOS                
  Where   CO_EMPR = @ISCO_EMPR              
  And     CO_PROV = @ISCO_PROV                
  And     CO_TIPO_DOCU = @ISCO_TIPO_DOCU              
  And     NU_DOCU_PROV = @ISNU_DOCU_PROV                
  And     NU_CORR = @VNNU_SECU               
              
  If @@Error != 0                
        Begin                
   Rollback Tran SP_TDDISP_INLO_I01                
   Return                
        End                
                
  Select @VNNU_CORR = @VNNU_CORR + 1              
 End --Gastos Financieros                
              
 If IsNull(@VNIM_SEGU,0) != 0               
 Begin                
              
  --Graba Asiento Seguro              
  Insert Into #TWDISP_CCOS                
  ( CO_EMPR, CO_PROV , CO_TIPO_DOCU, NU_DOCU_PROV,                
  NU_CORR, TI_AUXI_EMPR, CO_CENT_COST, CO_CNTA_EMPR,                
  CO_ORDE_SERV, ST_DIST, PO_DIST, IM_DIST, DE_OBSE )                
  Select  CO_EMPR, CO_PROV , CO_TIPO_DOCU, NU_DOCU_PROV,                
    NU_CORR + @VNNU_CORR, TI_AUXI_EMPR, CO_CENT_COST, @VSCO_CNTA_PTIM,                
    CO_ORDE_SERV, ST_DIST, PO_DIST, Round(IsNull(@VNIM_SEGU * (PO_DIST/100),0),2),                
    'SEGURO PRORRATEADO'                
  From    #TWDISP_CCOS                
  Where   CO_EMPR = @ISCO_EMPR                
  And     CO_PROV = @ISCO_PROV              
  And     CO_TIPO_DOCU = @ISCO_TIPO_DOCU                
  And     NU_DOCU_PROV = @ISNU_DOCU_PROV              
  And     NU_CORR = @VNNU_SECU              
                
  If @@Error != 0                
        Begin                
          Rollback Tran SP_TDDISP_INLO_I01                
          Return                
        End                
              
  Select @VNNU_CORR = @VNNU_CORR + 1              
              
 End --Mora              
              
              
 If IsNull(@VNIM_FLET,0) != 0               
 Begin                
              
  --Graba Asiento Flete               
  Insert Into #TWDISP_CCOS                
  ( CO_EMPR, CO_PROV , CO_TIPO_DOCU, NU_DOCU_PROV,                
  NU_CORR, TI_AUXI_EMPR, CO_CENT_COST, CO_CNTA_EMPR,                
  CO_ORDE_SERV, ST_DIST, PO_DIST, IM_DIST, DE_OBSE )                
  Select  CO_EMPR, CO_PROV , CO_TIPO_DOCU, NU_DOCU_PROV,                
    NU_CORR + @VNNU_CORR, TI_AUXI_EMPR, CO_CENT_COST, @VSCO_CNTA_PTIM,                
    CO_ORDE_SERV, ST_DIST, PO_DIST, Round(IsNull(@VNIM_FLET * (PO_DIST/100),0),2),                
    'FLETE PRORRATEADO'                
  From    #TWDISP_CCOS                
  Where   CO_EMPR = @ISCO_EMPR               
  And     CO_PROV = @ISCO_PROV               
  And     CO_TIPO_DOCU = @ISCO_TIPO_DOCU               
  And     NU_DOCU_PROV = @ISNU_DOCU_PROV               
  And     NU_CORR = @VNNU_SECU              
                
  If @@Error != 0                
        Begin                
   Rollback Tran SP_TDDISP_INLO_I01                
   Return                
        End                
    Select @VNNU_CORR = @VNNU_CORR + 1              
              
 End --Flete       
    
    
SELECT * FROM TDDISP_CCOS
INSERT INTO TDDISP_CCOS    
(CO_EMPR,CO_PROV,CO_TIPO_DOCU,NU_DOCU_PROV,NU_CORR,TI_AUXI_EMPR,CO_CENT_COST,    
CO_CNTA_EMPR,CO_ORDE_SERV,ST_DIST,PO_DIST,IM_DIST,DE_OBSE,TI_DOCU,NU_DOCU,FE_VENC)   
--CO_USUA_CREA,FE_USUA_CREA,CO_USUA_MODI,FE_USUA_MODI,    
    
SELECT CO_EMPR,CO_PROV,CO_TIPO_DOCU,NU_DOCU_PROV,ROW_NUMBER() OVER(ORDER BY MIN(NU_CORR)),TI_AUXI_EMPR,CO_CENT_COST,    
CO_CNTA_EMPR,CO_ORDE_SERV,MAX(ST_DIST),SUM(PO_DIST),SUM(IM_DIST),MAX(DE_OBSE),TI_DOCU,NU_DOCU,MAX(FE_VENC)
--,@ISCO_USUA,MAX(FE_USUA_CREA),@ISCO_USUA,MAX(FE_USUA_MODI)    
FROM #TWDISP_CCOS    
GROUP BY CO_EMPR,CO_PROV,CO_TIPO_DOCU,NU_DOCU_PROV, CO_CNTA_EMPR, TI_AUXI_EMPR, CO_CENT_COST,     
   CO_ORDE_SERV, TI_DOCU, NU_DOCU    
             
                
COMMIT TRANSACTION SP_TDDISP_INLO_I01              
        
          
RETURN              
/*------------------------------ Fin -------------------------------*/ 
GO
